<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script>
        // Object.defineProperty(object, propertyName, descriptor)
      /*   defineProperty:用于定义对象属性中构建属性的特殊状态
            object:将要添加属性的目标对象
            propertyName:对象中要添加的属性名(string)
            descriptor:对象参数(描述符)，详细设置该属性在对象中表现形式
                value:定义属性取值
                writable:描述该属性是否允许被修改，默认false
                configurable:描述该属性是否允许被删除，默认false
                enumerable:描述该属性是否允许循环查找（是否允许被遍历），默认false 
                数据操作劫持(拦截)方法
                value、writable配置和get、set配置是不能同时定义于同一个属性的配置
                get、set方法依赖于外部变量为变量提供数据支持
                get 取值方法，需要定义返回值，劫持（拦截）对象中属性的取值行为
                    通过返回值描述该属性的取值
                set 赋值方法，有参数，无返回值，劫持（拦截）对象中属性的赋值行为
                    参数属性赋值时传入的新数据

                
            */

        var user={
            name:"tom"
        };
        // user.age=20;
        // user["sex"]="男";
        // console.log(user);

        Object.defineProperty(user,"sex",{
            value:"女",
            writable:false,
            configurable:false,
            enumerable:false
        });
      
        // user.sex="男";

        // delete 对象.属性表示的是将对象user中的sex属性进行删除
        // delete user.sex;
        console.log(delete user.sex);//返回的是布尔值

        for(var key in user){
            console.log(key+"="+user[key]);
        }


        console.log(user);
        console.log("=============");
        var info="默认值";
        Object.defineProperty(user,"msg",{
            configurable:true,
            enumerable:true,
            get(){
                console.log("你取了user中msg");
                return info;
            },
            set(newValue){
                console.log("您触发了set方法");
                console.log(newValue);
                info=newValue;
            }

        });

        user.msg="哈哈";//属性赋值操作
        console.log(user.msg);//属性取值操作

        console.log("--------------------");
        for(var i in user){
            console.log(i+"="+user[i]);
        }
        console.log(user);
    </script>
</head>
<body>
    
</body>
</html>